logoyaffs
Menu



O que é memória flash?

A memória flash é um exemplo do dispositivo de armazenamento que eventualmente pode ser apagado ou modificado, seus chips possuem um funcionamento parecido com o de uma Memória RAM, pois permite que diferentes endereços possam ser apagados ou escritos em uma única operação. As maiores vantagens de se utilizar desse tipo de memória são o baixo consumo de energia, pouca ocupação de espaço. Alta resistência e sua durabilidade. Existem dois tipos de memórias flash, a NAND e a NOR, a memória flash NOR, permite que o acesso aos dados de maneira aleatória seja feita com alta velocidade, sua interface é parecida com a da memória RAM, servindo para armazenar BIOS e alguns tipos de firmwares de alguns dispositivos antes armazenados em ROM ou EPROM. Seu principal ponto fraco é o seu alto custo e o tempo de gravação. A memória flash NAND trabalha em uma velocidade muito e alta e consegue fazer acesso sequencial às células de memória, além de trata-las em conjuntos. O YAFFS é um sistema de arquivos que foi criado para mídias flash NAND, mesmo podendo ser utilizado em uma NOR, seu nome significa Yet Another Flash File System(YAFFS) e foi desenvolvido por Charles Manning durante o ano de 2001 e começou a ser amplamente utilizado já no meio de 2002. Sua prioridade é manter a integridade dos dados como prioridade, além de oferecer uma alta performance. Alguns dos antecessores do YAFFS foram: ETFS, exFAT, F2FS e o JFFS.


memória




YAFFS

O YAFFS 1 possui uma estrutura de log modificada, assim usando marcadores de exclusão, o que acaba quebrando a regra de gravação sequencial que é utilizada na estrutura de log. Isto não ocorre com o YAFFS 2, pois ele utiliza a estrutura de log que não usa marcadores de exclusão. Ele ao invés de escrever os dados em locais específicos, escreve na forma de um registro sequencial, o que nos mostra que suas entradas são de um tamanho e que podem conter duas partes. Primeiro a parte de dados, que contém arquivos de dados periódicos, e em segundo o cabeçalho do objeto, que descreve um diretório ou um arquivo de dados, o que contém informações como o diretório principal ou até mesmo o nome do objeto.

Explicando mais sobre como funciona o YAFFS1, podemos contemplar que ele a princípio só trabalhava com dispositivos de página de 512 bytes, mas precisou ser estendido para suportar páginas flash de maiores tamanho, como as páginas de 1k do Inter M18.

A memória flash NAND é disposta em páginas, e nelas temos a unidade de alocação e programação que são chamadas de “chunk”, ou "partes", traduzidas para o Português. Geralmente as chunks são o mesmo que uma página NAND, mas há exceções em que as chunks se mapeiam para várias páginas.

No YAFFS1 cada "parte" é marcada com um número de série de 2 bits que é incrementado cada "parte" com o mesmo valor de tag é substituído ou copiado pelo garbage collector. Como exemplo podemos tentar renomear onde existe um object header chunk, o YAFFS pode excluir a "parte" antiga e escrever a nova.




YAFFS2

O código do YAFFS2 acaba sendo muito versátil, pois além de possuir suas funcionalidades, também possui suporte para o YAFFS, o que o torna bem mais vantajoso, pois quando trabalhamos com NAND’s maiores e mais modernas ele também consegue resolver nosso problema.

O YAFFS2 a princípio foi projetado para páginas de pelo menos 1k, mas como possui suporte para o YAFFS1 também funciona com páginas menores. E um de seus objetivos é trabalhar com novos tipos de NAND, como Zero overwrites, no YAFFS1 apenas um byte é substituído na área de reposição dos chunks, e como os dispositivos NANDS mais novos são pouco tolerantes a sobreposições de bytes o YAFFS2 não realiza essa sobreposição, pois realiza uma escrita estritamente sequencial pois não utiliza deletion marks. Isso é bom porque algumas tecnologias flash funcionam apenas com escritas sequenciais.

Com isso o YAFFS2 executa menos operações, por isso que tem um desempenho melhor e mais rápido.

Outra de suas principais características é o ECC (Error Checking and Correction), as vezes as células flash NAND podem ser corrompidas, pela atividade NAND e pela perca de carga. O ECC, que pode ser implementado em hardware e drivers de softwares além dentro do YAFFS, corrige esse tipo de erro, qualquer sistema de arquivo flash que não possui um manuseio ECC funcional não pode ser totalmente eficiente. O único problema é que como o YAFFS2 é projetado para uma gama maior de dispositivos, ele não fornece um ECC internamente, mas ele exige que o driver o forneça. O YAFFS2 também possui estruturas de diretórios, o que permite acessar um objeto rapidamente pelo nome, esse requerimento permite executar operações de arquivos como abrir e renomear o arquivo. Essa estrutura de diretório é formada por uma árvore de objetos que tem um nó duplo linkados de folhas. Cada partição possui um diretório raíz e também alguns diretórios “falsos” que não são armazenados na NAND, mas que acabam sendo criados na montagem.




Mais Informações

Se uma partição de Yaffs foi de alguma forma corrompida, é possível criar um objeto durante a varredura, mas sem o cabeçalho do objeto (que contém o nome do objeto) que está sendo encontrado. O objeto não teria um nome. Nesses casos, o Yaffs cria um pseudônimo do número do objeto objnnnn do formulário para que o objeto possa ser colocado na estrutura do diretório.

Nos sistemas de arquivos POSIX, por exemplo, os nomes dos objetos são independentes na medida em que um objeto pode ter zero, um ou mais nomes.Ter arquivos com links zero são causados por construções como:
- Objetos que têm zero nomes são manipulados renomeando o objeto para um diretório falso que é usado para designar objetos desvinculados;
- Objetos com múltiplos nomes são tratados identificando um dos objetos e possuindo vários pseudo-objetos de ligação;
- O número do inode é um número exclusivo do sistema que identificia o objeto. O objeto que é obtido no YAFFS é apresentado ao usuário.

A ligação entre pseudo-objetos e hard links é equivalente através de dois campos:
- Cada objeto tem um nó duplamente vinculado ao hard link que linka a lista de hard links ao objeto;
- Cada hard link possui um ponteiro que é equivalente ao objeto;

Uma parte do YAFFS são as árvores Tnodes, nelas cada arquivo possui uma árvore Tnode para mapear o endereço e a posição do arquivo do bloco NAND, e elas pode sem representadas na seguinte imagem:
Árvore de nós.

A árvore Tnode é composta de nós dispostos em vários níveis, em que cada um possui ou níveis maiores que 0, ou um tnode com 8 ponteiros para outros tnodes de um nível abaixo, como exemplificado na imagem acima. No nível 0, um tnode possui 16 partes, que identificam em que lugar do bloco eles estão na memória RAM.






Contato

Universidade Estadual de Ponta Grossa

Departamento de Informática

Sistemas Operacionais



Acadêmicos:

Carlos Henrique Ribeiro
E-mail: carlaumrib@gmail.com

Victor Pellizer Iritsu
E-mail: victor.iritsu@hotmail.com